package cn.com.cpic.insurance.rulecheck.consumer;

import java.util.List;

import com.google.common.collect.Lists;

/**
 * 规则校验的结果。 校验时，需要对每个规则都执行判断，将结果调用<code>addResult()</code>方法。 
 * 如果校验不通过，要将出错提示信息调用<code>addMessage()</code>方法。
 * 
 * @author 林青
 */
public class BooleanResult {

	private boolean result = true;
	private List<String> messages = Lists.newArrayList();

	/**
	 * 增加一条规则校验的结果。
	 * 
	 * @param result
	 */
	public BooleanResult addResult(boolean result) {
		this.result &= result;
		return this;
	}

	/**
	 * 增加一条规则校验未通过时的出错提醒信息。
	 * 
	 * @param message
	 */
	public BooleanResult addMessage(String message) {
		this.messages.add(message);
		return this;
	}

	/**
	 * 取得最终的校验结果。
	 * 
	 * @return
	 */
	public boolean getResult() {
		return this.result;
	}

	/**
	 * 取得所有出错提醒信息。如果不存在出错提醒信息，返回<code>size</code>为<code>0</code>的
	 * <code>List</code>。
	 * 
	 * @return
	 */
	public List<String> getMessages() {
		return this.messages;
	}

	/**
	 * 合并两个结果，返回新的结果对象，对传入的结果对象不做任何修改。
	 * @param result1
	 * @param result2
	 * @return
	 */
	public static BooleanResult merge(BooleanResult result1, BooleanResult result2) {
		BooleanResult retVal = new BooleanResult();
		retVal.addResult(result1.result);
		retVal.addResult(result2.result);
		retVal.messages.addAll(result1.messages);
		retVal.messages.addAll(result2.messages);
		return retVal;
	}
}
